// 登录页面逻辑 - 中医适宜技术防控青少年近视系统

const { login, wechatLogin, getUserProfile } = require('../../utils/auth.js');

Page({
  data: {
    // 表单数据
    formData: {
      phone: '',
      password: ''
    },
    
    // 加载状态
    wechatLoading: false,
    normalLoading: false,
    testLoading: false,
    
    // 表单验证错误
    errors: {
      phone: '',
      password: ''
    },
    
    // 开发环境显示测试登录
    showTestLogin: false,
    
    // 环境信息显示
    currentEnvironment: '',
    currentApiUrl: ''
  },

  /**
   * 页面加载
   */
  onLoad(options) {
    console.log('登录页面加载');
    
    // 检查是否为开发环境
    this.checkEnvironment();
    
    // 显示当前环境信息
    this.updateEnvironmentInfo();
    
    // 如果有回调页面参数，保存起来
    if (options.redirect) {
      this.setData({
        redirectUrl: decodeURIComponent(options.redirect)
      });
    }
  },

  /**
   * 更新环境信息显示
   */
  updateEnvironmentInfo() {
    const app = getApp();
    const isDev = wx.getStorageSync('use_development_env');
    
    this.setData({
      currentEnvironment: isDev ? '开发环境' : '生产环境',
      currentApiUrl: app.globalData.apiBaseUrl || '未设置'
    });
    
    console.log('当前环境:', this.data.currentEnvironment);
    console.log('当前API地址:', this.data.currentApiUrl);
  },

  /**
   * 切换环境
   */
  switchEnvironment() {
    const app = getApp();
    const currentIsDev = wx.getStorageSync('use_development_env');
    
    wx.showModal({
      title: '切换环境',
      content: `当前：${currentIsDev ? '开发环境' : '生产环境'}\n是否切换到${currentIsDev ? '生产环境' : '开发环境'}？`,
      success: (res) => {
        if (res.confirm) {
          // 切换环境
          wx.setStorageSync('use_development_env', !currentIsDev);
          wx.setStorageSync('environment_set', true);
          
          // 更新全局API地址
          app.globalData.apiBaseUrl = app.getApiBaseUrl();
          
          // 更新页面显示
          this.updateEnvironmentInfo();
          
          wx.showToast({
            title: `已切换到${!currentIsDev ? '开发环境' : '生产环境'}`,
            duration: 2000
          });
        }
      }
    });
  },

  /**
   * 检查环境
   */
  checkEnvironment() {
    // 这里可以根据实际情况判断是否为开发环境
    const accountInfo = wx.getAccountInfoSync();
    const isDevTool = accountInfo.miniProgram.envVersion === 'develop';
    
    this.setData({
      showTestLogin: isDevTool
    });
  },

  /**
   * 手机号输入
   */
  onPhoneInput(e) {
    const phone = e.detail.value;
    this.setData({
      'formData.phone': phone,
      'errors.phone': ''
    });
  },

  /**
   * 密码输入
   */
  onPasswordInput(e) {
    const password = e.detail.value;
    this.setData({
      'formData.password': password,
      'errors.password': ''
    });
  },

  /**
   * 表单验证
   */
  validateForm() {
    const { phone, password } = this.data.formData;
    const errors = {};
    let isValid = true;

    // 验证手机号
    if (!phone) {
      errors.phone = '请输入手机号';
      isValid = false;
    } else if (!/^1[3-9]\d{9}$/.test(phone)) {
      errors.phone = '请输入正确的手机号';
      isValid = false;
    }

    // 验证密码
    if (!password) {
      errors.password = '请输入密码';
      isValid = false;
    } else if (password.length < 6) {
      errors.password = '密码至少6位';
      isValid = false;
    }

    this.setData({ errors });
    return isValid;
  },

  /**
   * 微信登录
   */
  handleWechatLogin() {
    if (this.data.wechatLoading) return;

    this.setData({ wechatLoading: true });

    // 获取微信授权
    wx.login({
      success: (loginRes) => {
        if (!loginRes.code) {
          this.setData({ wechatLoading: false });
          wx.showToast({
            title: '获取微信授权失败',
            icon: 'error'
          });
          return;
        }

        // 调用后端微信登录接口
        wechatLogin(loginRes.code)
          .then(async (result) => {
            this.setData({ wechatLoading: false });
            
            if (result.success) {
              wx.showToast({
                title: '登录成功',
                icon: 'success'
              });
              // 正确保存用户信息（避免覆盖为 undefined）
              let userInfo = result && result.data ? result.data.userInfo : null;
              if (!userInfo) {
                try {
                  userInfo = await getUserProfile();
                } catch (e) {
                  console.warn('获取用户资料失败(微信登录后)', e);
                }
              }
              if (userInfo) {
                wx.setStorageSync('userInfo', userInfo);
                const app = getApp();
                app.globalData.userInfo = userInfo;
              }
              
              // 登录成功后跳转
              this.handleLoginSuccess();
            } else {
              wx.showToast({
                title: result.message || '登录失败',
                icon: 'error'
              });
            }
          })
          .catch((error) => {
            this.setData({ wechatLoading: false });
            console.error('微信登录失败:', error);
            wx.showToast({
              title: error.message || '登录失败',
              icon: 'error'
            });
          });
      },
      fail: (error) => {
        this.setData({ wechatLoading: false });
        console.error('微信登录失败:', error);
        wx.showToast({
          title: '微信登录失败',
          icon: 'error'
        });
      }
    });
  },

  /**
   * 普通登录
   */
  handleNormalLogin() {
    if (this.data.normalLoading) return;

    // 表单验证
    if (!this.validateForm()) {
      // 显示第一个错误信息
      const { errors } = this.data;
      const firstError = errors.phone || errors.password;
      if (firstError) {
        wx.showToast({
          title: firstError,
          icon: 'error'
        });
      }
      return;
    }

    this.setData({ normalLoading: true });

    const { phone, password } = this.data.formData;
    
    login(phone, password)
      .then(async (result) => {
        this.setData({ normalLoading: false });
        
        if (result.success) {
          wx.showToast({
            title: '登录成功',
            icon: 'success'
          });
          // 正确保存用户信息
          let userInfo = result && result.data ? result.data.userInfo : null;
          if (!userInfo) {
            try {
              userInfo = await getUserProfile();
            } catch (e) {
              console.warn('获取用户资料失败(普通登录后)', e);
            }
          }
          if (userInfo) {
            wx.setStorageSync('userInfo', userInfo);
            const app = getApp();
            app.globalData.userInfo = userInfo;
          }
          
          // 登录成功后跳转
          this.handleLoginSuccess();
        } else {
          wx.showToast({
            title: result.message || '登录失败',
            icon: 'error'
          });
        }
      })
      .catch((error) => {
        this.setData({ normalLoading: false });
        console.error('登录失败:', error);
        wx.showToast({
          title: error.message || '登录失败',
          icon: 'error'
        });
      });
  },

  /**
   * 测试登录（开发环境）
   */
  handleTestLogin() {
    if (this.data.testLoading) return;

    this.setData({ testLoading: true });

    // 使用测试账号登录
    login('13800138000', '123456')
      .then(async (result) => {
        this.setData({ testLoading: false });
        
        if (result.success) {
          wx.showToast({
            title: '测试登录成功',
            icon: 'success'
          });
          // 保存用户信息（测试环境下若无，尝试获取）
          let userInfo = result && result.data ? result.data.userInfo : null;
          if (!userInfo) {
            try {
              userInfo = await getUserProfile();
            } catch (e) {
              console.warn('获取用户资料失败(测试登录后)', e);
            }
          }
          if (userInfo) {
            wx.setStorageSync('userInfo', userInfo);
            const app = getApp();
            app.globalData.userInfo = userInfo;
          }
          
          // 登录成功后跳转
          this.handleLoginSuccess();
        } else {
          wx.showToast({
            title: '测试登录失败',
            icon: 'error'
          });
        }
      })
      .catch((error) => {
        this.setData({ testLoading: false });
        console.error('测试登录失败:', error);
        wx.showToast({
          title: '测试登录失败',
          icon: 'error'
        });
      });
  },

  /**
   * 登录成功处理
   */
  handleLoginSuccess() {
    // 延迟跳转，让用户看到成功提示
    setTimeout(() => {
      if (this.data.redirectUrl) {
        // 如果有指定的跳转页面
        wx.redirectTo({
          url: this.data.redirectUrl,
          fail: () => {
            this.goToDefaultPage();
          }
        });
      } else {
        this.goToDefaultPage();
      }
    }, 1500);
  },

  /**
   * 跳转到默认页面
   */
  goToDefaultPage() {
    // 默认跳转到个人中心或首页
    wx.switchTab({
      url: '/pages/welcome/welcome',
      fail: () => {
        wx.navigateBack({
          delta: 1
        });
      }
    });
  },

  /**
   * 跳转到注册页面
   */
  navigateToRegister() {
    wx.navigateTo({
      url: '/pages/register/register'
    });
  },

  /**
   * 分享功能
   */
  onShareAppMessage() {
    return {
      title: '中医适宜技术防控青少年近视系统',
      path: '/pages/welcome/welcome'
    };
  }
});
